使用二进制着色器

使用二进制着色器缩短 Kanzi 应用程序的加载时间。默认情况下,Kanzi 使用在线着色器,Kanzi Studio 将其作为源代码导出至 kzb 文件。当在目标设备上启动 Kanzi 应用程序时,应用程序会使用 GL 驱动程序加载并编译着色器。编译过程会增加应用程序的加载时间。如果使用二进制着色器,Kanzi Studio 在您导出 kzb 文件时编译着色器,并以您设置的二进制格式导出着色器。您的目标设备可以立即使用二进制着色器。

您只能在驱动程序支持二进制着色器的那些 GPU 上使用二进制着色器,而且还需要拥有适用于设备上的 GPU 的离线着色器编译器。如果 GPU 不支持二进制着色器,Kanzi Engine 会从源编译着色器。虽然设备厂商声称支持特定的二进制着色器格式,但并不意味设备总是支持所有二进制着色器。

您可以:

使用通用的二进制着色器格式

要使用通用的二进制着色器格式:

  1. 确定您的目标设备所使用的 GPU 的 GPU 厂商、GPU 内核版本和 GPU 驱动程序版本,并从 GPU 厂商那里获得正确的二进制着色器编译器。
  2. Kanzi Studio素材库 (Library) 中,按下 Alt 并右键点击 材质和纹理 (Materials and Textures) > 着色器格式 (Shader Formats),然后选择二进制着色器格式 (Binary Shader Format)

  3. 以您的目标设备所使用的 GPU 名称命名二进制着色器格式。

    GPU 供应商名称 (Name)
    Imagination TechnologiesSGX_BINARY_IMGIMG
    ARM MaliMALI_SHADER_BINARY_ARM
    VivanteSHADER_BINARY_VIV
    Digital Media ProfessionalsSHADER_BINARY_DMP
    Fujitsu SemiconductorGCCSO_SHADER_BINARY_FJ
    NVidiaNVIDIA_PLATFORM_BINARY_NVTegra

    如果您的目标设备使用任何其他 GPU,并且您具备该 GPU 的离线着色器编译器,则使用该着色器格式 GL 常量值的十进制值命名。

  4. 属性 (Properties) 中设置:
  5. 要测试目标设备上的二进制着色器是否正常工作,请执行以下操作:
    1. 选择文件 (File) > 导出 (Export) > 导出 KZB (Export KZB)
    2. 启动目标设备上的 Kanzi 应用程序,并查看应用程序日志。如果在日志中没有发现任何与二进制着色器有关的错误,则表明二进制着色器能够正常工作。请参阅部署 Kanzi 应用程序

使用二进制着色器替换 Kanzi 着色器

Kanzi 提供一系列默认材质类型,用于执行基础的渲染操作,例如渲染文本或位块纹理。Kanzi 将默认材质类型存储在专门的 kzb 文件中,后者嵌入在 Kanzi kzcoreui 库中。默认材质类型只提供源着色器,因此应用程序启动过程中或当在应用程序运行时过程中需要使用着色器时,Kanzi 需要一些时间编译着色器。如果想缩短 Kanzi 应用程序的启动时间,您可以用您目标设备的二进制着色调替换掉默认材质类型中内置的源着色器。

要将 Kanzi 着色器替换为二进制着色器,请执行以下操作:

  1. Kanzi Studio 中任意打开以下其中一个工程:
  2. (可选) 如果您不想用二进制着色器替换掉所有 Kanzi 默认着色器,请删除 RuntimeAssets 工程中以下项目:
  3. 为您的目标设备创建二进制着色器格式。请参阅使用通用的二进制着色器格式
  4. RuntimeAssets 工程主菜单中选择 工程 (Project) > 属性 (Properties),然后在 属性 (Properties) 中:
  5. 选择文件 (File) > 导出 (Export) > 导出 KZB (Export KZB)
    Kanzi Studio 会在 <KanziWorkspace>/Assets/RuntimeAssets/Tool_project/Binary 目录中创建 RuntimeAssets.kzb 文件。
  6. 通过以下任意方式,在 Kanzi 应用程序的资源管理器中注册 RuntimeAssets.kzb 文件:

Kanzi 应用程序启动时,会从 RuntimeAssets.kzb 文件加载二进制着色器,而非使用内置的源着色器。由于 Kanzi Engine 不需要编译源着色器,所以能够缩短 Kanzi 应用程序的启动时间。

为工程中的多个目标设备设置二进制着色器

Kanzi 解决方案中,每个包含着色器的 Kanzi Studio 工程只需要为每种目标设备提供一种二进制着色器格式。在 Kanzi Studio 中,您可以使用主题在每个 kzb 文件中,只包含一个特定目标设备所需的二进制着色器。如果您的 Kanzi Studio 解决方案包含多个工程,您可以将着色器、材质类型和材质存储在专门的资源工程中。这样,您便可以在一个工程中管理不同目标设备的内容。

要为一个工程中的多个目标设备设置二进制着色器,请执行以下操作:

  1. 素材库 (Library) > 主题 (Theme) 中创建一个 主题组 (Theme Group),并在 属性 (Properties) 中启用 导出烘培的用途 (Export Baked Usages) 属性。
    您使用此 主题组 (Theme Group),为每个需要不同二进制着色器格式的目标设备创建主题。
    当启用 导出烘培的用途 (Export Baked Usages) 属性时,您可以从该主题组中的主题烘培资源。请参阅烘培主题 (Theme)
  2. 素材库 (Library) > 主题 (Theme) 中,双击您在上一步创建的 主题组 (Theme Group),然后在 主题编辑器 (Theme Editor) 中为每个需要不同二进制着色器格式的目标设备创建主题。请参阅使用主题 (Theme)
  3. 素材库 (Library) > 材质和纹理 (Materials and Textures) > 着色器格式 (Shader Formats) 中选择您要使用的 二进制着色器格式 (Binary Shader Format),然后在 属性 (Properties) 中将 主题 (Theme) 属性设置为您在上一步中为需要此二进制着色器格式的目标设备创建的主题。
    这样,您便将 Kanzi Studio 设置为导出含有此已烘焙主题的 二进制着色器格式 (Binary Shader Format)
  4. 选择 文件 (File) > 导出 (Export) > 导出烘培的主题二进制 (Export Baked Theme Binaries),并在 导出时要烘培主题和地区 (Themes and Locales to Bake on Export) 窗口中为您创建的 主题组 (Theme Group) 选择任意一个 < All > 以烘焙对应 主题组 (Theme Group) 中的所有主题,或是您想要烘焙的某个特定主题。请参阅导出烘培 主题 (Theme)

当您导出这些已烘焙的主题时,Kanzi Studio 会在每个 kzb 文件中,仅包含拥有您为对应已烘焙主题设置的二进制着色器类型的材质类型。

另请参阅

部署 Kanzi 应用程序

减少着色器切换

优化片段着色器

并行加载资源

着色器最佳实践

排除应用程序的性能问题

最佳实践

组合Kanzi Studio 工程到Kanzi 应用程序

为应用程序制定主题

使用主题 (Theme)

导出主题 (Theme)